// 域名测试环境与正式环境
//一级封装：封装wx通用请求（get/post/put/delete)
//1. 有用户登录请求头带有token，无用户登录请求头不带token
//2. 添加请求url域名前缀
//3. 请求成功（code==200）执行成功回调函数，请求失败执行失败回调函数
import md5 from 'js-md5'
import sotre from '@/store'
import { uuidMiddle,objKeySort,enums } from "./sign.js"
let URL_PREV = "https://pz.techwells.com/client-peizhen"

const global = {
	doInvoke: function(url, method, params, isThird, successCb, errorCb) {
		const token = uni.getStorageSync('token')
		let header = {
			"content-type": 'application/json',
			"X-requested-With": "XMLHttpRequest",
			'Access-Control-Allow-Origin': true,
			'Authorization': token||'',
			// 'AppType': 'mini',
			// 'appName': 'haowuju',
			// 'appVersion': '1.1.2'
		}
		// let param = {...params} 
		// // 生成唯一随机字符串(UUID 去中划线-)
		// let appNonce = uuidMiddle()
		// // 生成当前时间时间戳
		// const appTimeStamp = new Date().getTime()
		// // 签名处理
		// // -------测试生成appSign-------
		// params.appTimeStamp = appTimeStamp
		// params.appNonce = appNonce
		// let paramsAfter = objKeySort(params)
		// paramsAfter.signSercetKey = enums.signSaltKey + appNonce
		// let stringAfter = ""
		// for (let key in paramsAfter) {
		// 	stringAfter = stringAfter + ("&" + key + "=" + paramsAfter[key])
		// }
		// stringAfter = stringAfter.substring(1)
		// let appSign = (md5(stringAfter)).toUpperCase()
		// param.appTimeStamp = appTimeStamp
		// param.appNonce = appNonce
		// param.appSign = appSign
		uni.request({
			url: (isThird ? `${url}` : `${URL_PREV}${url}`),
			header: header,
			method: method || 'get',
			data: params || {},
			success: function(res) {
				if(url=='/user/mpLogin') {
					uni.setStorageSync('token', res.header.Authorization)
				}
				if(res.data.code==401&&url!='/user/getMpAccessToken') {
					sotre.commit('logout')
					successCb(res.data)
					// uni.showToast({
					// 	icon: 'none',
					// 	title: '登录状态已失效，请重新登录',
					// })
					// setTimeout(() => {
					// 	uni.navigateTo({
					// 		url: '/pages/public/login'
					// 	})
					// }, 1000)
				} else {
					successCb(res.data)
				}
			},
			fail: function(err) {
				errorCb(err)
			},
			response: function(res){
				console.log(res)
			},
			complete: function(response) {
				// uni.hideLoading()
			}
		})
	}
}

//二级封装：对一级封装做处理
//1. 返回 promise 
//2. 捕捉异常。请求失败抛出异常，进行toast弹框提示用户请求结果失败
export const Request = {
	doInvoke: function(url, method, data, isThird) {
		return new Promise((resolve, reject) => {
			global.doInvoke(url, method, data, isThird, function(res) {
				resolve(res)
			}, function(err) {
				console.log(err)
				reject(err)
			})
		}).catch(function(e) {
			console.log(e)
			if (e != "token_not_provided") {
				uni.showToast({
					title: e,
					icon: 'none',
					duration: 1500
				})
			}
		})
	}
}